package com.shujia

object Demo17List {
  def main(args: Array[String]): Unit = {

    /**
      * list  列表   ->  有序（插入顺序），不唯一
      *
      */

    //  List  是一个不可变的list
    val list: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9)


    println(list.head) //取头
    println(list.last) //取尾
    println(list.take(2)) //topN，返回一个新的list
    println(list.tail) //取初不包含第一个的所有元素
    println(list.reverse) // 反转   返回一个新的集合

    println(list(1)) //通过下标取数据


    //和split功能相反
    println(list.mkString(",")) //将集合中的每个元素通过逗号拼接


    println(list.max)
    println(list.min)
    println(list.sum)


    /**
      * map  --- >  对集合中的每个元素进行处理
      * map函数在所有的scala的集合中都有
      */

    val list2: List[Int] = list.map(i => i * 2)
    println(list2)


    //通过增强for遍历
    for (elem <- list) {
      println(elem)
    }

    println("=" * 100)

    //时使用foreach遍历
    list.foreach(i => println(i))

    println("=" * 100)

    //由于println也是一个函数
    list.foreach(println)
    println("=" * 100)

    val words: List[String] = List("java,spark", "java,scala", "hadoop,hive,java")


    /**
      *
      * map  元素对应关系是 一对一关系
      * flatMap  元素对应关系是一对多
      *
      * flatMap在map的基础上将数据进行扁平化
      *
      */

    val flatMapList: List[String] = words.flatMap(line => line.split(","))

    println(flatMapList)


    //Nil  长度为0的集合
    //::  在集合前面增加一个元素，返回一个新的集合

    val list3: List[Int] = 5 :: 2 :: 1 :: Nil
    println(list3)


  }

}
